﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace delagete_Demo
{
    /*
     * 猫大叫一声，所有的老鼠都开始逃跑，主人被惊醒。
     * 要求：  
     * 1.要有联动性，老鼠和主人的行为是被动的。
     * 2.考虑可扩展性，猫的叫声可能引起其他联动效应。
     * 
     */
    class CatDelagete
    {
        public delegate void CatCallDelagete();

        public static CatCallDelagete myCatCallDelagete;

        //猫叫了
        public static void CatCall()
        {
            Console.WriteLine("猫大叫一声！");
        }

        //老鼠跑了
        public static void MouseEscape()
        {
            Console.WriteLine("所有的老鼠都开始逃跑！");
        }


        //主任被惊醒了
        public static void MasterAwaken()
        {
            Console.WriteLine("主人被惊醒！");
        }

        static void Main(string[] args)
        {
            #region 版本1
            myCatCallDelagete += new CatCallDelagete(CatCall);
            myCatCallDelagete += new CatCallDelagete(MouseEscape);
            myCatCallDelagete += new CatCallDelagete(MasterAwaken);
            myCatCallDelagete();
            Console.WriteLine();
            Console.WriteLine();
            #endregion

            #region 版本2
            myCatCallDelagete = () =>
            {
                Console.WriteLine("猫大叫一声！");
                Console.WriteLine("所有的老鼠都开始逃跑！");
                Console.WriteLine("主人被惊醒！");
            };
            myCatCallDelagete();
            #endregion

            Console.ReadKey();
        }
    }
}
